package ar.com.sgsvm.dao.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import ar.com.sgsvm.dao.ITipoUsuarioDao;
import ar.com.sgsvm.dao.SqliteDaoFactory;
import ar.com.sgsvm.entity.TipoUsuario;
import ar.com.sgsvm.exceptions.NonexistentEntityException;

public class TipoUsuarioSqliteDao implements ITipoUsuarioDao {

	@Override
	public Long create(TipoUsuario tipoUsuario) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("nombre", tipoUsuario.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		return sqliteDaoFactory.open().insert("TipoUsuario", null, contentValues);
	}

	@Override
	public List<TipoUsuario> readAll() throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("TipoUsuario", null, null, null, null, null, null);
		List<TipoUsuario> tiposUsuario = new ArrayList<TipoUsuario>();
		if (cursor.moveToFirst()) {
			do {
				TipoUsuario tipoUsuario = new TipoUsuario();
				tipoUsuario.setIdTipoUsuario(cursor.getLong(cursor.getColumnIndex("idTipoUsuario")));
				tipoUsuario.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
				tiposUsuario.add(tipoUsuario);
			} while (cursor.moveToNext());
		}
		cursor.close();
		return tiposUsuario;
	}

	@Override
	public TipoUsuario readById(Long idTipoUsuario) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("TipoUsuario", null, "idTipoUsuario = ?", new String[] { String.valueOf(idTipoUsuario) }, null, null, null);
		if (cursor.moveToFirst()) {
			TipoUsuario tipoUsuario = new TipoUsuario();
			tipoUsuario.setIdTipoUsuario(idTipoUsuario);
			tipoUsuario.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
			cursor.close();
			return tipoUsuario;
		} else {
			throw new NonexistentEntityException("No existe el tipo de usuario con id " + String.valueOf(idTipoUsuario));
		}
	}

	@Override
	public void update(TipoUsuario tipoUsuario) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("nombre", tipoUsuario.getNombre());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().update("TipoUsuario", contentValues, "idTipoUsuario = ?", new String[] { String.valueOf(tipoUsuario.getIdTipoUsuario()) });
	}

	@Override
	public void delete(TipoUsuario tipoUsuario) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().delete("TipoUsuario", "idTipoUsuario = ?", new String[] { String.valueOf(tipoUsuario.getIdTipoUsuario()) });
	}

}
